Add new format "g7towin". This format can read data files (.g7t) from G7ToWin.
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 15 Apr 2007 19:46:40 +0000 (19:46 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 15 Apr 2007 19:46:40 +0000 (19:46 +0000)
gpsbabel/g7towin.c [new file with mode: 0644]
gpsbabel/reference/expertgps-g7t.txt [new file with mode: 0644]

diff --git a/gpsbabel/g7towin.c b/gpsbabel/g7towin.c
new file mode 100644 (file)
index 0000000..4160977
--- /dev/null
@@ -0,0 +1,541 @@
+/*
+
+    Support for G7ToWin data files (.g7t),
+    Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+*/
+
+/*
+    History:
+               04/07/2007: start programming
+*/
+
+#include "defs.h"
+#include "csv_util.h"
+#include "garmin_fs.h"
+#include "garmin_tables.h"
+#include "jeeps/gpsmath.h"
+#include "strptime.h"
+
+#include <time.h>
+
+#if CSVFMTS_ENABLED
+
+#define MYNAME "g7towin"
+
+#define G7T_HEADER     "Version 2:G7T"
+
+static gbfile *fin;
+static grid_type grid;
+static int datum;
+static gpsdata_type mode;
+static double altf;
+static int gardown;
+static int event_ct;
+
+static
+arglist_t g7towin_args[] = {
+       ARG_TERMINATOR
+};
+
+#define WAYPT__OFS     0x00000
+#define TRKPT__OFS     0x01000
+
+#define WPT_c0_OFS     0x0c000
+#define WPT_c1_OFS     0x0c100
+#define WPT_c2_OFS     0x0c200
+#define WPT_c3_OFS     0x0c300
+#define WPT_c4_OFS     0x0c400
+#define WPT_c5_OFS     0x0c500
+#define WPT_c6_OFS     0x0c600
+#define WPT_c7_OFS     0x0c700
+#define WPT_c8_OFS     0x0c800
+#define WPT_cA_OFS     0x0cA00
+#define WPT_cB_OFS     0x0cB00
+#define WPT_cC_OFS     0x0cC00
+#define WPT_cD_OFS     0x0cD00
+
+static void
+parse_line(char *buff, int index, const char *delimiter, waypoint *wpt)
+{
+       char *cin;
+       garmin_fs_p gmsd = GMSD_FIND(wpt);
+
+       while ((cin = csv_lineparse(buff, delimiter, "", index++))) {
+
+               buff = NULL;
+               cin = lrtrim(cin);
+               
+               if ((*cin == '\0') || 
+                   (strcmp(cin, "INF") == 0) ||
+                   (strcmp(cin, "1e25") == 0) ||
+                   (strcmp(cin, "1.0e25") == 0)) continue;
+               
+               switch(index) {
+
+                       int categories, dyn;
+                       struct tm tm;
+                       char *cerr;
+                       
+                       case TRKPT__OFS + 1:
+                               cin += parse_coordinates(cin, datum, grid,
+                                       &wpt->latitude, &wpt->longitude, MYNAME);
+                               while (isspace(*cin)) cin++;
+                               
+                               memset(&tm, 0, sizeof(tm));
+                               cerr = strptime(cin, "%a %b %d %H:%M:%S %Y", &tm);
+                               if (cerr == NULL) {
+                                       fatal(MYNAME ": Unable to convert date (%s)!\n", cin);
+                               }
+                               wpt->creation_time = mkgmtime(&tm);
+                               break;
+                               
+                       case WAYPT__OFS + 1: 
+                               wpt->description = xstrdup(cin); 
+                               break;
+
+                       case WAYPT__OFS + 2:
+                               wpt->icon_descr = gt_find_desc_from_icon_number(
+                                       atoi(cin), PCX, &dyn);
+                               wpt->wpt_flags.icon_descr_is_dynamic = dyn;
+                               break;
+
+                       case WAYPT__OFS + 4:
+                               if (strcmp(cin, "S+C") == 0) {
+                                       GMSD_SET(display, gt_display_mode_symbol_and_comment);
+                               }
+                               else if (strcmp(cin, "S") == 0) {
+                                       GMSD_SET(display, gt_display_mode_symbol);
+                               }
+                               else if (strcmp(cin, "S+N") == 0) {
+                                       GMSD_SET(display, gt_display_mode_symbol_and_name);
+                               }
+                               break;
+
+                       case WPT_cA_OFS + 1:
+                       case WPT_c1_OFS + 1:
+                               if (wpt->shortname) xfree(wpt->shortname);
+                               wpt->shortname = xstrdup(cin);
+                               break;
+
+                       case WPT_cA_OFS + 4:
+                       case WPT_c4_OFS + 2:
+                               GMSD_SETSTR(city, cin);
+                               break;
+
+                       case WPT_cA_OFS + 5:
+                       case WPT_c4_OFS + 3:
+                               GMSD_SETSTR(state, cin);
+                               break;
+
+                       case WPT_cA_OFS + 6:
+                       case WPT_c4_OFS + 4:
+                               GMSD_SETSTR(cc, cin);
+                               break;
+
+                       case WPT_cB_OFS + 1:
+                       case WPT_c6_OFS + 2:
+                               GMSD_SETSTR(facility, cin);
+                               break;
+
+                       case WPT_cB_OFS + 2:
+                       case WPT_c6_OFS + 3:
+                               GMSD_SETSTR(addr, cin);
+                               break;
+
+                       case WPT_cB_OFS + 3: /*cross road */
+                       case WPT_c6_OFS + 4:
+                               GMSD_SETSTR(cross_road, cin);
+                               break;
+
+                       case TRKPT__OFS + 2: /* altitude */
+                       case WPT_cC_OFS + 1:
+                       case WPT_c5_OFS + 1:
+                       case WPT_c8_OFS + 1:
+                               wpt->altitude = altf * atof(cin);
+                               break;
+
+                       case TRKPT__OFS + 3: /* depth */
+                       case WPT_cC_OFS + 2:
+                       case WPT_c5_OFS + 2:
+                       case WPT_c8_OFS + 2:
+                               GMSD_SET(depth, altf * atof(cin));
+                               break;
+                               
+                       case TRKPT__OFS + 10: /* temperature */
+                               if (*cin == '|') cin++; /* in track points */
+                               if (strcmp(cin, "1e25") == 0) break;
+                               if (strcmp(cin, "1.0e25") == 0) break;
+                               /* !!! NO BREAK !!! */
+                       case WPT_cD_OFS + 1:
+                       case WPT_cB_OFS + 6:
+                               GMSD_SET(temperature, atof(cin));
+                               break;
+
+                       case WAYPT__OFS + 6: /* proximity */
+                       case WPT_cD_OFS + 2:
+                               GMSD_SET(proximity, atof(cin));
+                               break;
+
+                       case WPT_cB_OFS + 5: 
+                       case WPT_cD_OFS + 3:
+                               categories = atoi(cin);
+                               if (categories != 0)
+                                       GMSD_SET(category, atoi(cin));
+                               break;
+                               
+#if 0
+
+/* currently unused */
+
+                       case TRKPT__OFS + 5: /* distance from previous point */
+                       case TRKPT__OFS + 6: /* distance from segment start */
+                       case TRKPT__OFS + 7: /* distance from start */
+                       case TRKPT__OFS + 8: /* velocity from previous point */
+                       case TRKPT__OFS + 9: /* time (in seconds) from previous point */
+                               break;
+
+                       case WAYPT__OFS + 3: /* ignore color */
+                               break;
+
+                       case WAYPT__OFS + 5: /* always '0' */
+                               break;
+
+                       case TRKPT__OFS + 4:
+                               if (case_ignore_strcmp(cin, "FT") == 0) ;
+                               else if (case_ignore_strcmp(cin, "M") == 0) ;
+                               else if (case_ignore_strcmp(cin, "SM") == 0) ;
+                               else if (case_ignore_strcmp(cin, "NM") == 0) ;
+                               else if (case_ignore_strcmp(cin, "KM") == 0) ;
+                               break;
+
+                       case WPT_cB_OFS + 4: /* unknown (datatype) */
+                               break;
+
+                       case WPT_cC_OFS + 3: /* waypt_class (always FF) */
+                               break;
+
+                       case WPT_cC_OFS + 4: /* class & subclass */
+                       case WPT_cC_OFS + 5: 
+                       case WPT_cC_OFS + 6:
+                       case WPT_cC_OFS + 7: 
+                       case WPT_cC_OFS + 8: 
+                       case WPT_cC_OFS + 9: 
+                       case WPT_cC_OFS + 10:
+                       case WPT_cC_OFS + 11: 
+                       case WPT_cC_OFS + 12: 
+                       case WPT_cC_OFS + 13: 
+                       case WPT_cC_OFS + 14:
+                       case WPT_cC_OFS + 15: 
+                       case WPT_cC_OFS + 16: 
+                       case WPT_cC_OFS + 17: 
+                       case WPT_cC_OFS + 18:
+                       case WPT_cC_OFS + 19: 
+                       case WPT_cC_OFS + 20: 
+                       case WPT_cC_OFS + 21: 
+                               break;
+
+                       case WPT_cC_OFS + 22:
+                               /* distance */
+                               break;
+#endif
+               }
+       }
+}
+
+static waypoint *
+parse_waypt(char *buff)
+{
+       char *cin, *cerr;
+       int i;
+       struct tm tm;
+       waypoint *wpt;
+       garmin_fs_p gmsd;
+       
+       wpt = waypt_new();
+       gmsd = garmin_fs_alloc(-1);
+       fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+       
+       if (gardown)
+               cin = buff + 6;
+       else
+               cin = buff + 15;
+
+       while (isspace(*cin)) cin--;
+       if (cin >= buff)
+               wpt->shortname = xstrndup(buff, cin - buff + 1);
+
+       if (gardown)
+               buff += 7;
+       else
+               buff += 16;
+
+       buff += parse_coordinates(buff, datum, grid,
+               &wpt->latitude, &wpt->longitude, MYNAME);
+       while (isspace(*buff)) buff++;
+
+       memset(&tm, 0, sizeof(tm));
+       cerr = strptime(buff, "%a %b %d %H:%M:%S %Y", &tm);
+       if (cerr == NULL)
+               fatal(MYNAME ": Unable to convert date (%s)!\n", buff);
+       wpt->creation_time = mkgmtime(&tm);
+       
+       /* go over time stamp */
+       i = 5;
+       while (buff && i) {
+               i--;
+               buff = strchr(buff, ' ');
+               if (buff) buff++;
+       }
+       if (gardown && (buff == NULL)) return wpt;
+       is_fatal((buff == NULL), MYNAME ": Incomplete waypoint line!");
+
+       while (isspace(*buff)) buff++;
+
+       parse_line(buff, WAYPT__OFS, "^", wpt);
+
+       return wpt;
+}
+
+static waypoint *
+parse_trkpt(char *buff)
+{
+       garmin_fs_p gmsd;
+       waypoint *wpt;
+       
+       wpt = waypt_new();
+       gmsd = garmin_fs_alloc(-1);
+       fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+       
+       parse_line(buff, TRKPT__OFS, ";", wpt);
+       
+       return wpt;
+}
+
+/*
+ * parse_categories is currently only a dummy procedure.
+ * w'll need a central storage with binding to the module
+ * which has established a list of category names.
+ */
+static void
+parse_categories(char *buff)
+{
+       char *cin;
+       int cat = 0;
+       
+       while ((cin = csv_lineparse(buff, ",", "", cat++))) {
+               gbuint16 cx;
+               
+               buff = NULL;
+               
+               cin = lrtrim(cin);
+               if (*cin == 0) continue;
+               
+               garmin_fs_convert_category(cin, &cx);
+       }
+}
+
+
+/* main functions */
+
+static void
+rd_init(const char *fname)
+{
+       fin = gbfopen(fname, "rb", MYNAME);
+       
+       gardown = 1;
+       mode = wptdata;
+       grid = grid_lat_lon_dmm;
+       datum = DATUM_WGS84;
+       altf = 1;
+       event_ct = 0;
+}
+
+static void
+rd_deinit(void)
+{
+       gbfclose(fin);
+}
+
+static void
+data_read(void)
+{
+       char *buff;
+       int line = 0;
+       waypoint *wpt = NULL;
+       waypoint *prev = NULL;
+       route_head *head = NULL;
+       
+       while ((buff = gbfgetstr(fin))) {
+               char *cin = buff;
+               char *cdata;
+               
+               line++;
+               
+               cin = lrtrim(buff);
+               if (!*cin) continue;
+               
+               cdata = cin+1;
+               while (! isspace(*cdata)) cdata++;
+               while (isspace(*cdata)) cdata++;
+               if (! *cdata) continue;
+               
+               switch(*cin) {
+
+               case '#': /* comment */
+                       break;
+                       
+               case 'A':
+                       if (case_ignore_strncmp(cdata, "Meter", 5) == 0)
+                               altf = 1.0;
+                       else if (case_ignore_strncmp(cdata, "Feet", 4) == 0)
+                               altf = FEET_TO_METERS(1.0);
+                       break;
+
+               case 'C': /* categories */
+                       parse_categories(cdata);
+                       break;
+
+               case 'D':
+                       datum = gt_lookup_datum_index(cdata, MYNAME);
+                       break;
+
+               case 'I': /* event point */
+                       wpt = waypt_new();
+                       cdata += parse_coordinates(cdata, datum, grid,
+                               &wpt->latitude, &wpt->longitude, MYNAME);
+                       xasprintf(&wpt->shortname, "Event%d", ++event_ct);
+                       while (isspace(*cdata)) cdata++;
+                       if (*cdata == ';') {
+                               int dyn;
+                               
+                               cdata++;
+                               wpt->icon_descr = gt_find_desc_from_icon_number(
+                                       atoi(cdata), PCX, &dyn);
+                               wpt->wpt_flags.icon_descr_is_dynamic = dyn;
+                       }
+                       waypt_add(wpt);
+                       break;
+                       
+               case 'M':
+                       grid = gt_lookup_grid_type(cdata, MYNAME);
+                       break;
+
+               case 'P': /* proximity waypoint */
+               case 'W': /* normal waypoint */
+                       wpt = parse_waypt(cdata);
+                       prev = wpt;
+                       if (wpt) {
+                               if (mode == rtedata)
+                                       route_add_wpt(head, wpt);
+                               else
+                                       waypt_add(wpt);
+                       }
+                       break;
+
+               case 'c': /* additional lines */
+                       switch(*(cin+1)) {
+                       int index;
+                       
+                       case 'A': case 'B':
+                       case 'C': case 'D':
+                               
+                               index = WPT_cA_OFS + ((*(cin+1) - 'A') * 256);
+                               parse_line(cdata, index, "|", wpt);
+                               break;
+                               
+                       case '1': case '2': case '3': case '4':
+                       case '5': case '6': case '7': case '8':
+                       
+                               index = WPT_c0_OFS + ((*(cin+1) - '0') * 256);
+                               parse_line(cdata, index, ";", wpt);
+                               break;
+                               
+                       case 'L':
+                               waypt_add_url(wpt, xstrdup(cdata), NULL);
+                               break;
+
+                       default:
+                               break;
+                       }
+                       break;
+                       
+               case 'N':       /* track log header */
+                       mode = trkdata;
+                       head = route_head_alloc();
+                       cdata = strchr(cdata, '-');
+                       if (cdata) {
+                               while (isspace(*cdata)) cdata++;
+                               if (*cdata) {
+                                       char *s;
+                                       s = strrchr(cdata, ',');
+                                       if (s) {
+                                               *s = '\0';
+                                               s = strrchr(cdata, ',');
+                                               if (s) {
+                                                       *s = '\0';
+                                                       head->rte_name = xstrdup(cdata);
+                                               }
+                                       }
+                               }
+                       }
+                       track_add_head(head);
+                       break;
+
+               case 'R':       /* route header */
+                       mode = rtedata;
+                       head = route_head_alloc();
+                       cdata += 3; /*skip route number */
+                       if (*cdata) head->rte_name = xstrdup(cdata);
+                       route_add_head(head);
+                       break;
+
+               case 'T':
+                       wpt = parse_trkpt(cdata);
+                       if (wpt) track_add_wpt(head, wpt);
+                       break;
+                       
+               case 'V':
+                       if (strcmp(cin, G7T_HEADER) != 0) {
+                               fatal(MYNAME ": Invalid version or invalid file!\n");
+                       }
+                       gardown = 0;
+                       break;
+
+               default:
+                       break;
+               }
+       }
+}
+
+/* --------------------------------------------------------------------------- */
+
+ff_vecs_t g7towin_vecs = {
+       ff_type_file,
+       { ff_cap_read, ff_cap_read, ff_cap_read },
+       rd_init,
+       NULL,
+       rd_deinit,
+       NULL,
+       data_read,
+       NULL,
+       NULL,
+       g7towin_args,
+       CET_CHARSET_MS_ANSI, 0
+};
+
+#endif /* CSVFMTS_ENABLED */
diff --git a/gpsbabel/reference/expertgps-g7t.txt b/gpsbabel/reference/expertgps-g7t.txt
new file mode 100644 (file)
index 0000000..2b1591d
--- /dev/null
@@ -0,0 +1,216 @@
+Grid   Lat/Lon hddd°mm.mmm'\r
+Datum  WGS 84\r
+\r
+Header Name    Description     Type    Position        Altitude        Depth   Proximity       Temperature     Display Mode    Color   Symbol  Facility        City    State   Country Date Modified   Link    Categories\r
+\r
+Waypoint       5058ROAD        ROAD CROSSING   User Waypoint   N42 26.400 W71 07.257   54 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 00:18:14             \r
+Waypoint       5066            User Waypoint   N42 26.333 W71 07.158   45 m                            Symbol & Name   Unknown Crossing                                        28/11/2001 21:05:28             \r
+Waypoint       5067            User Waypoint   N42 26.354 W71 07.183   58 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
+Waypoint       5096            User Waypoint   N42 26.335 W71 06.970   45 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
+Waypoint       5142            User Waypoint   N42 26.634 W71 07.324   51 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       5144SUMMIT              User Waypoint   N42 26.721 W71 07.372   62 m                            Symbol & Name   Unknown Summit                                  28/11/2001 21:05:28             \r
+Waypoint       5148NANEPA              User Waypoint   N42 26.986 W71 07.341   120 m                           Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
+Waypoint       5150TANK        WATER TANK      User Waypoint   N42 26.504 W71 07.302   67 m                            Symbol & Name   Unknown Museum                                  02/06/2001 00:18:16             \r
+Waypoint       5156            User Waypoint   N42 26.838 W71 07.288   128 m                           Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:58             \r
+Waypoint       5179DEAD        Dead End        User Waypoint   N42 26.992 W71 07.159   117 m                           Symbol & Name   Unknown Danger Area                                     02/06/2001 03:26:59             \r
+Waypoint       5224            User Waypoint   N42 27.292 W71 07.507   97 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:59             \r
+Waypoint       5229            User Waypoint   N42 27.545 W71 07.501   83 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:59             \r
+Waypoint       5236BRIDGE      Bridge  User Waypoint   N42 27.388 W71 07.481   90 m                            Symbol & Name   Unknown Bridge                                  02/06/2001 03:26:59             \r
+Waypoint       5237            User Waypoint   N42 27.419 W71 07.470   83 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:59             \r
+Waypoint       5239ROAD        Road    User Waypoint   N42 27.557 W71 07.476   81 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:00             \r
+Waypoint       5252PURPLE              User Waypoint   N42 27.195 W71 07.274   78 m                            Symbol & Name   Unknown Summit                                  07/11/2001 23:53:41             \r
+Waypoint       5254            User Waypoint   N42 27.264 W71 07.261   67 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       5258            User Waypoint   N42 27.086 W71 07.306   75 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
+Waypoint       5264            User Waypoint   N42 27.264 W71 07.241   65 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       526708          User Waypoint   N42 27.466 W71 07.264   77 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:00             \r
+Waypoint       526750          User Waypoint   N42 27.425 W71 07.220   75 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:00             \r
+Waypoint       5267OBSTAC              User Waypoint   N42 27.443 W71 07.192   74 m                            Symbol & Name   Unknown Amusement Park                                  02/06/2001 03:27:00             \r
+Waypoint       527614          User Waypoint   N42 27.395 W71 07.182   79 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
+Waypoint       527631          User Waypoint   N42 27.375 W71 07.163   79 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
+Waypoint       5278            User Waypoint   N42 27.489 W71 07.150   68 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:00             \r
+Waypoint       5278ROAD        Road    User Waypoint   N42 27.527 W71 07.141   67 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:01             \r
+Waypoint       5287WATER       Reservoir       User Waypoint   N42 27.464 W71 07.050   68 m                            Symbol & Name   Unknown Swimming Area                                   02/06/2001 03:27:01             \r
+Waypoint       5289            User Waypoint   N42 27.563 W71 07.063   64 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:01             \r
+Waypoint       5299DEAD        Dead End        User Waypoint   N42 27.578 W71 06.993   69 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:01             \r
+Waypoint       5374FIRE                User Waypoint   N42 27.851 W71 07.191   53 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       5376            User Waypoint   N42 27.939 W71 07.166   56 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
+Waypoint       5376BRIDGE      Bridge  User Waypoint   N42 27.945 W71 07.190   55 m                            Symbol & Name   Unknown Bridge                                  02/06/2001 03:27:01             \r
+Waypoint       5376DEAD        Dead End        User Waypoint   N42 27.929 W71 07.150   57 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:02             \r
+Waypoint       5376STREAM              User Waypoint   N42 27.955 W71 07.161   65 m                            Symbol & Name   Unknown Bridge                                  07/11/2001 23:53:41             \r
+Waypoint       6006            User Waypoint   N42 26.341 W71 06.869   56 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
+Waypoint       6006BLUE                User Waypoint   N42 26.316 W71 06.890   46 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       6014MEADOW              User Waypoint   N42 26.205 W71 06.795   38 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       6016    Bike Loop Connector     User Waypoint   N42 26.320 W71 06.846   43 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
+Waypoint       6029            User Waypoint   N42 26.505 W71 06.795   56 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
+Waypoint       6042CROSS       Crossing        User Waypoint   N42 26.128 W71 06.581   45 m                            Symbol & Name   Unknown Crossing                                        02/06/2001 03:27:05             \r
+Waypoint       6053            User Waypoint   N42 26.175 W71 06.546   50 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:05             \r
+Waypoint       6066            User Waypoint   N42 26.355 W71 06.452   26 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
+Waypoint       6067            User Waypoint   N42 26.386 W71 06.457   34 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
+Waypoint       6071            User Waypoint   N42 26.086 W71 06.354   30 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
+Waypoint       6073            User Waypoint   N42 25.998 W71 06.397   15 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:56             \r
+Waypoint       6077LOGS        Log Crossing    User Waypoint   N42 26.370 W71 06.395   32 m                            Symbol & Name   Unknown Amusement Park                                  02/06/2001 00:18:16             \r
+Waypoint       6084            User Waypoint   N42 26.240 W71 06.288   38 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
+Waypoint       6121DEAD        Dead End        User Waypoint   N42 26.586 W71 06.762   56 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:26:57             \r
+Waypoint       6130            User Waypoint   N42 26.532 W71 06.660   64 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
+Waypoint       6131            User Waypoint   N42 26.579 W71 06.688   64 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:58             \r
+Waypoint       6153            User Waypoint   N42 26.686 W71 06.535   63 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:05             \r
+Waypoint       6155DEAD        Dead End        User Waypoint   N42 26.808 W71 06.529   61 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:04             \r
+Waypoint       6171            User Waypoint   N42 26.615 W71 06.380   55 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:05             \r
+Waypoint       6176            User Waypoint   N42 26.868 W71 06.399   62 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
+Waypoint       6177            User Waypoint   N42 26.907 W71 06.371   62 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
+Waypoint       6181CROSS       Crossing        User Waypoint   N42 26.580 W71 06.354   53 m                            Symbol & Name   Unknown Crossing                                        02/06/2001 03:27:05             \r
+Waypoint       6272            User Waypoint   N42 27.205 W71 06.409   70 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
+Waypoint       6278            User Waypoint   N42 27.498 W71 06.408   70 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
+Waypoint       6280            User Waypoint   N42 27.086 W71 06.326   58 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
+Waypoint       6283            User Waypoint   N42 27.231 W71 06.314   67 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
+Waypoint       6289            User Waypoint   N42 27.599 W71 06.372   73 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
+Waypoint       6297            User Waypoint   N42 27.457 W71 06.309   73 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
+Waypoint       6328            User Waypoint   N42 28.027 W71 06.816   54 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
+Waypoint       6353DEAD        Dead End        User Waypoint   N42 27.766 W71 06.601   47 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:03             \r
+Waypoint       6354            User Waypoint   N42 27.852 W71 06.593   44 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:03             \r
+Waypoint       635722          User Waypoint   N42 27.988 W71 06.606   49 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
+Waypoint       635783          User Waypoint   N42 27.993 W71 06.566   49 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
+Waypoint       6373            User Waypoint   N42 27.810 W71 06.429   62 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:03             \r
+Waypoint       6634            User Waypoint   N42 24.063 W71 06.616   4 m                             Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:56             \r
+Waypoint       6979            User Waypoint   N42 25.957 W71 06.393   13 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:56             \r
+Waypoint       6997            User Waypoint   N42 25.862 W71 06.475   34 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
+Waypoint       BEAR HILL       BEAR HILL TOWER User Waypoint   N42 27.941 W71 06.443   88 m                            Symbol & Name   Unknown Tall Tower                                      02/06/2001 03:27:03             \r
+Waypoint       BELLEVUE                User Waypoint   N42 25.857 W71 06.459   23 m                            Symbol & Name   Unknown Parking Area                                    02/06/2001 00:18:15             \r
+Waypoint       DARKHOLLPO      Dark Hollow Pond        User Waypoint   N42 27.511 W71 06.220                                   Symbol & Name   Unknown Fishing Area                                    16/07/2005 20:53:40             \r
+Waypoint       GATE14  Gate 14 User Waypoint   N42 27.072 W71 07.598   111 m                           Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:26:59             \r
+Waypoint       GATE16  Gate 16 User Waypoint   N42 27.510 W71 07.326   78 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:00             \r
+Waypoint       GATE17  Gate 17 User Waypoint   N42 27.562 W71 07.156   66 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:01             \r
+Waypoint       GATE19  Gate 19 User Waypoint   N42 27.981 W71 07.156   57 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:02             \r
+Waypoint       GATE21  Gate 21 User Waypoint   N42 28.119 W71 06.463   49 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:03             \r
+Waypoint       GATE24  Gate 24 User Waypoint   N42 27.403 W71 06.180   81 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:03             \r
+Waypoint       GATE5   Gate 5  User Waypoint   N42 25.851 W71 06.463   22 m                            Symbol & Name   Unknown Truck Stop                                      28/11/2001 21:05:28             \r
+Waypoint       GATE6           User Waypoint   N42 25.874 W71 06.556   27 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
+Waypoint       PANTHRCAVE              User Waypoint   N42 26.099 W71 06.598   45 m                            Symbol & Name   Unknown Tunnel                                  07/11/2001 23:53:41             \r
+Waypoint       SHEEPFOLD       Sheepfold Parking Lot   User Waypoint   N42 27.205 W71 06.408   70 m                            Symbol & Name   Unknown Parking Area                                    02/06/2001 00:18:13             \r
+Waypoint       SOAPBOX Soap Box Derby Track    User Waypoint   N42 27.357 W71 06.451   64 m                            Symbol & Name   Unknown Cemetery                                        02/06/2001 03:27:04             \r
+\r
+\r
+Header Name    Length  Course  Waypoints       Link\r
+\r
+Route  BELLEVUE        11.2 km 0° true 46 waypoints    \r
+\r
+Header Waypoint Name   Distance        Leg Length      Course\r
+\r
+Route Waypoint BELLEVUE        0 m\r
+Route Waypoint GATE6   136 m   136 m   284° true\r
+Route Waypoint PANTHRCAVE      556 m   420 m   352° true\r
+Route Waypoint 6014MEADOW      891 m   334 m   306° true\r
+Route Waypoint 6006    1.2 km  271 m   338° true\r
+Route Waypoint 6006BLUE        1.2 km  55 m    211° true\r
+Route Waypoint 5096    1.3 km  116 m   288° true\r
+Route Waypoint 5066    1.6 km  257 m   269° true\r
+Route Waypoint 5067    1.6 km  52 m    319° true\r
+Route Waypoint 5058ROAD        1.8 km  133 m   310° true\r
+Route Waypoint 5150TANK        2.0 km  203 m   342° true\r
+Route Waypoint 5142    2.2 km  244 m   353° true\r
+Route Waypoint 5144SUMMIT      2.4 km  175 m   338° true\r
+Route Waypoint 5156    2.6 km  245 m   28° true\r
+Route Waypoint 5148NANEPA      2.9 km  284 m   345° true\r
+Route Waypoint 5258    3.1 km  193 m   14° true\r
+Route Waypoint 5252PURPLE      3.3 km  207 m   12° true\r
+Route Waypoint 527631  3.7 km  367 m   25° true\r
+Route Waypoint 527614  3.7 km  46 m    325° true\r
+Route Waypoint 5267OBSTAC      3.8 km  90 m    351° true\r
+Route Waypoint 5278    3.9 km  103 m   35° true\r
+Route Waypoint 5289    4.1 km  181 m   41° true\r
+Route Waypoint 5374FIRE        4.7 km  563 m   342° true\r
+Route Waypoint 5376    4.8 km  167 m   12° true\r
+Route Waypoint 5376STREAM      4.9 km  30 m    11° true\r
+Route Waypoint 6328    5.4 km  491 m   74° true\r
+Route Waypoint 635722  5.7 km  297 m   104° true\r
+Route Waypoint 635783  5.7 km  55 m    79° true\r
+Route Waypoint 6373    6.1 km  389 m   151° true\r
+Route Waypoint BEAR HILL       6.3 km  245 m   355° true\r
+Route Waypoint 6289    7.0 km  642 m   171° true\r
+Route Waypoint 6297    7.3 km  278 m   162° true\r
+Route Waypoint 6283    7.7 km  420 m   181° true\r
+Route Waypoint 6280    8.0 km  269 m   184° true\r
+Route Waypoint 6177    8.3 km  338 m   190° true\r
+Route Waypoint 6176    8.4 km  81 m    208° true\r
+Route Waypoint 6153    8.8 km  385 m   209° true\r
+Route Waypoint 6171    9.0 km  249 m   122° true\r
+Route Waypoint 6131    9.4 km  428 m   261° true\r
+Route Waypoint 6130    9.5 km  95 m    156° true\r
+Route Waypoint 6029    9.7 km  191 m   255° true\r
+Route Waypoint 6006    10.0 km 321 m   198° true\r
+Route Waypoint 6014MEADOW      10.3 km 271 m   158° true\r
+Route Waypoint PANTHRCAVE      10.7 km 334 m   126° true\r
+Route Waypoint GATE6   11.1 km 420 m   172° true\r
+Route Waypoint BELLEVUE        11.2 km 136 m   104° true\r
+\r
+\r
+Header Name    Start Time      Elapsed Time    Length  Average Speed   Link\r
+\r
+Track  - Trk from .gpx file    25/05/2002 17:06:21     1:59:36 7.7 km  4 kph   \r
+\r
+Header Position        Time    Altitude        Depth   Leg Length      Leg Time        Leg Speed       Leg Course\r
+\r
+Trackpoint     N30 03.731 W91 36.620   25/05/2002 17:06:21     1 m     0.0 m\r
+Trackpoint     N30 03.767 W91 36.633   25/05/2002 17:09:55             0.0 m   70 m    0:03:34 1.2 kph 343° true\r
+Trackpoint     N30 03.762 W91 36.495   25/05/2002 17:12:00             0.0 m   222 m   0:02:05 6 kph   92° true\r
+Trackpoint     N30 03.740 W91 36.442   25/05/2002 17:12:48             0.0 m   94 m    0:00:48 7 kph   116° true\r
+Trackpoint     N30 03.692 W91 36.316   25/05/2002 17:14:41             0.0 m   221 m   0:01:53 7 kph   114° true\r
+Trackpoint     N30 03.587 W91 35.963   25/05/2002 17:17:16             0.0 m   599 m   0:02:35 14 kph  109° true\r
+Trackpoint     N30 03.468 W91 35.800   25/05/2002 17:17:46             0.0 m   342 m   0:00:30 41 kph  130° true\r
+Trackpoint     N30 03.323 W91 35.693   25/05/2002 17:18:20             0.0 m   319 m   0:00:34 34 kph  147° true\r
+Trackpoint     N30 03.233 W91 35.556   25/05/2002 17:19:01             0.0 m   276 m   0:00:41 24 kph  127° true\r
+Trackpoint     N30 02.984 W91 35.384   25/05/2002 17:20:46             0.0 m   538 m   0:01:45 18 kph  149° true\r
+Trackpoint     N30 02.941 W91 35.392   25/05/2002 17:21:10             0.0 m   81 m    0:00:24 12 kph  189° true\r
+Trackpoint     N30 02.928 W91 35.575   25/05/2002 17:21:51             0.0 m   295 m   0:00:41 26 kph  265° true\r
+Trackpoint     N30 02.774 W91 35.786   25/05/2002 17:22:35             0.0 m   443 m   0:00:44 36 kph  230° true\r
+Trackpoint     N30 02.731 W91 35.922   25/05/2002 17:23:08             0.0 m   233 m   0:00:33 25 kph  250° true\r
+Trackpoint     N30 02.838 W91 36.015   25/05/2002 18:04:23             0.0 m   248 m   0:41:15 0.4 kph 323° true\r
+Trackpoint     N30 02.820 W91 35.977   25/05/2002 18:06:04     2 m     0.0 m   70 m    0:01:41 2 kph   119° true\r
+Trackpoint     N30 02.786 W91 35.967   25/05/2002 18:07:06             0.0 m   65 m    0:01:02 4 kph   166° true\r
+Trackpoint     N30 02.772 W91 35.936   25/05/2002 18:08:18     1 m     0.0 m   56 m    0:01:12 3 kph   117° true\r
+Trackpoint     N30 02.782 W91 35.863   25/05/2002 18:10:20             0.0 m   119 m   0:02:02 4 kph   81° true\r
+Trackpoint     N30 02.781 W91 35.829   25/05/2002 18:11:09             0.0 m   55 m    0:00:49 4 kph   92° true\r
+Trackpoint     N30 02.807 W91 35.779   25/05/2002 18:12:18             0.0 m   94 m    0:01:09 5 kph   59° true\r
+Trackpoint     N30 02.847 W91 35.711   25/05/2002 18:14:22             0.0 m   132 m   0:02:04 4 kph   56° true\r
+Trackpoint     N30 02.868 W91 35.685   25/05/2002 18:15:04     2 m     0.0 m   57 m    0:00:42 5 kph   47° true\r
+Trackpoint     N30 02.895 W91 35.644   25/05/2002 18:16:14     1 m     0.0 m   83 m    0:01:10 4 kph   53° true\r
+Trackpoint     N30 02.921 W91 35.627   25/05/2002 18:17:01     1 m     0.0 m   55 m    0:00:47 4 kph   30° true\r
+Trackpoint     N30 02.961 W91 35.630   25/05/2002 18:18:07             0.0 m   74 m    0:01:06 4 kph   356° true\r
+Trackpoint     N30 03.019 W91 35.638   25/05/2002 18:19:51     2 m     0.0 m   108 m   0:01:44 4 kph   353° true\r
+Trackpoint     N30 03.047 W91 35.646   25/05/2002 18:20:39             0.0 m   53 m    0:00:48 4 kph   346° true\r
+Trackpoint     N30 03.074 W91 35.661   25/05/2002 18:21:24             0.0 m   56 m    0:00:45 4 kph   334° true\r
+Trackpoint     N30 03.108 W91 35.661   25/05/2002 18:22:17             0.0 m   63 m    0:00:53 4 kph   0° true\r
+Trackpoint     N30 03.133 W91 35.679   25/05/2002 18:23:18             0.0 m   55 m    0:01:01 3 kph   328° true\r
+Trackpoint     N30 03.181 W91 35.680   25/05/2002 18:24:37             0.0 m   89 m    0:01:19 4 kph   359° true\r
+Trackpoint     N30 03.292 W91 35.711   25/05/2002 18:28:13     6 m     0.0 m   212 m   0:03:36 4 kph   346° true\r
+Trackpoint     N30 03.224 W91 35.695   25/05/2002 18:31:36     2 m     0.0 m   129 m   0:03:23 2 kph   168° true\r
+Trackpoint     N30 03.191 W91 35.686   25/05/2002 18:32:56             0.0 m   63 m    0:01:20 3 kph   167° true\r
+Trackpoint     N30 03.158 W91 35.689   25/05/2002 18:34:02             0.0 m   61 m    0:01:06 3 kph   184° true\r
+Trackpoint     N30 03.147 W91 35.725   25/05/2002 18:36:03             0.0 m   61 m    0:02:01 2 kph   251° true\r
+Trackpoint     N30 03.149 W91 35.757   25/05/2002 18:36:48             0.0 m   52 m    0:00:45 4 kph   274° true\r
+Trackpoint     N30 03.159 W91 35.806   25/05/2002 18:37:52     1 m     0.0 m   81 m    0:01:04 5 kph   283° true\r
+Trackpoint     N30 03.188 W91 35.870   25/05/2002 18:39:18             0.0 m   116 m   0:01:26 5 kph   298° true\r
+Trackpoint     N30 03.217 W91 35.877   25/05/2002 18:40:15             0.0 m   55 m    0:00:57 3 kph   348° true\r
+Trackpoint     N30 03.238 W91 35.865   25/05/2002 18:41:25     6 m     0.0 m   43 m    0:01:10 2 kph   26° true\r
+Trackpoint     N30 03.217 W91 35.884   25/05/2002 18:42:37             0.0 m   49 m    0:01:12 2 kph   218° true\r
+Trackpoint     N30 03.192 W91 35.874   25/05/2002 18:44:01             0.0 m   49 m    0:01:24 2 kph   161° true\r
+Trackpoint     N30 03.169 W91 35.850   25/05/2002 18:45:53             0.0 m   57 m    0:01:52 2 kph   138° true\r
+Trackpoint     N30 03.154 W91 35.815   25/05/2002 18:46:54             0.0 m   63 m    0:01:01 4 kph   116° true\r
+Trackpoint     N30 03.140 W91 35.785   25/05/2002 18:47:42             0.0 m   55 m    0:00:48 4 kph   118° true\r
+Trackpoint     N30 03.135 W91 35.740   25/05/2002 18:48:41             0.0 m   73 m    0:00:59 4 kph   97° true\r
+Trackpoint     N30 03.133 W91 35.700   25/05/2002 18:49:52             0.0 m   64 m    0:01:11 3 kph   93° true\r
+Trackpoint     N30 03.113 W91 35.681   25/05/2002 18:50:49             0.0 m   48 m    0:00:57 3 kph   141° true\r
+Trackpoint     N30 03.063 W91 35.663   25/05/2002 18:52:14             0.0 m   97 m    0:01:25 4 kph   163° true\r
+Trackpoint     N30 03.034 W91 35.653   25/05/2002 18:52:56             0.0 m   56 m    0:00:42 5 kph   163° true\r
+Trackpoint     N30 03.011 W91 35.645   25/05/2002 18:53:38             0.0 m   45 m    0:00:42 4 kph   163° true\r
+Trackpoint     N30 02.946 W91 35.622   25/05/2002 18:55:11             0.0 m   126 m   0:01:33 5 kph   163° true\r
+Trackpoint     N30 02.907 W91 35.654   25/05/2002 18:56:32             0.0 m   89 m    0:01:21 4 kph   215° true\r
+Trackpoint     N30 02.885 W91 35.684   25/05/2002 18:57:24             0.0 m   63 m    0:00:52 4 kph   230° true\r
+Trackpoint     N30 02.850 W91 35.726   25/05/2002 18:58:40     7 m     0.0 m   94 m    0:01:16 4 kph   226° true\r
+Trackpoint     N30 02.824 W91 35.759   25/05/2002 18:59:28             0.0 m   72 m    0:00:48 5 kph   228° true\r
+Trackpoint     N30 02.798 W91 35.795   25/05/2002 19:00:22             0.0 m   75 m    0:00:54 5 kph   230° true\r
+Trackpoint     N30 02.784 W91 35.858   25/05/2002 19:01:41             0.0 m   105 m   0:01:19 5 kph   256° true\r
+Trackpoint     N30 02.774 W91 35.907   25/05/2002 19:02:48             0.0 m   81 m    0:01:07 4 kph   257° true\r
+Trackpoint     N30 02.779 W91 35.937   25/05/2002 19:03:43             0.0 m   49 m    0:00:55 3 kph   281° true\r
+Trackpoint     N30 02.807 W91 35.956   25/05/2002 19:04:49             0.0 m   60 m    0:01:06 3 kph   330° true\r
+Trackpoint     N30 02.828 W91 35.979   25/05/2002 19:05:57             0.0 m   54 m    0:01:08 3 kph   317° true\r